package co.com.tye.presentation.backingBeans;

import co.com.tye.exceptions.*;
import co.com.tye.modelo.*;
import co.com.tye.modelo.dto.FacultadDTO;
import co.com.tye.presentation.businessDelegate.*;
import co.com.tye.utilities.*;

import org.primefaces.component.calendar.*;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;

import org.primefaces.event.RowEditEvent;

import java.io.Serializable;

import java.sql.*;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

/**
 * @author Zathura Code Generator http://code.google.com/p/zathura/
 *         www.zathuracode.org
 *
 */
@ManagedBean
@ViewScoped
public class FacultadView implements Serializable {
	private static final long serialVersionUID = 1L;

	private InputText txtNombreFacultad;
	private InputText txtIduniversidad_Universidad;
	private InputText txtIdfacultad;

	private CommandButton btnSave;
	private CommandButton btnModify;
	private CommandButton btnDelete;
	private CommandButton btnClear;
	private List<FacultadDTO> data;
	private FacultadDTO selectedFacultad;
	private Facultad entity;
	private boolean showDialog;
	@ManagedProperty(value = "#{BusinessDelegatorView}")
	private IBusinessDelegatorView businessDelegatorView;

	public FacultadView() {
		super();
	}

	public void rowEventListener(RowEditEvent e) {
		try {
			FacultadDTO facultadDTO = (FacultadDTO) e.getObject();

			if (txtNombreFacultad == null) {
				txtNombreFacultad = new InputText();
			}

			txtNombreFacultad.setValue(facultadDTO.getNombreFacultad());

			if (txtIduniversidad_Universidad == null) {
				txtIduniversidad_Universidad = new InputText();
			}

			txtIduniversidad_Universidad.setValue(facultadDTO
					.getIduniversidad_Universidad());

			if (txtIdfacultad == null) {
				txtIdfacultad = new InputText();
			}

			txtIdfacultad.setValue(facultadDTO.getIdfacultad());

			Integer idfacultad = FacesUtils.checkInteger(txtIdfacultad);
			entity = businessDelegatorView.getFacultad(idfacultad);

			action_modify();
		} catch (Exception ex) {
		}
	}

	public String action_new() {
		action_clear();
		selectedFacultad = null;
		setShowDialog(true);

		return "";
	}

	public String action_clear() {
		entity = null;
		selectedFacultad = null;

		if (txtNombreFacultad != null) {
			txtNombreFacultad.setValue(null);
			txtNombreFacultad.setDisabled(false);
		}

		if (txtIduniversidad_Universidad != null) {
			txtIduniversidad_Universidad.setValue(null);
			txtIduniversidad_Universidad.setDisabled(false);
		}

		if (btnSave != null) {
			btnSave.setDisabled(false);
		}

		if (btnDelete != null) {
			btnDelete.setDisabled(false);
		}

		return "";
	}

	public void listener_txtId() {
		try {
			Integer idfacultad = FacesUtils.checkInteger(txtIdfacultad);
			entity = (idfacultad != null) ? businessDelegatorView
					.getFacultad(idfacultad) : null;
		} catch (Exception e) {
			entity = null;
		}

		if (entity == null) {
			// txtEstadoRegistro.setDisabled(false);
			txtNombreFacultad.setDisabled(false);
			/*
			 * txtUsuarioCreador.setDisabled(false);
			 * txtUsuarioUltimaModificacion.setDisabled(false);
			 */
			txtIduniversidad_Universidad.setDisabled(false);
			/*
			 * txtFechaCreacion.setDisabled(false);
			 * txtFechaUltimaModificacion.setDisabled(false);
			 */
			txtIdfacultad.setDisabled(false);
			btnSave.setDisabled(false);
		} else {
			/*
			 * txtEstadoRegistro.setValue(entity.getEstadoRegistro());
			 * txtEstadoRegistro.setDisabled(false);
			 * txtFechaCreacion.setValue(entity.getFechaCreacion());
			 * txtFechaCreacion.setDisabled(false);
			 * txtFechaUltimaModificacion.setValue
			 * (entity.getFechaUltimaModificacion());
			 * txtFechaUltimaModificacion.setDisabled(false);
			 */
			txtNombreFacultad.setValue(entity.getNombreFacultad());
			txtNombreFacultad.setDisabled(false);
			/*
			 * txtUsuarioCreador.setValue(entity.getUsuarioCreador());
			 * txtUsuarioCreador.setDisabled(false);
			 * txtUsuarioUltimaModificacion
			 * .setValue(entity.getUsuarioUltimaModificacion());
			 * txtUsuarioUltimaModificacion.setDisabled(false);
			 */
			txtIduniversidad_Universidad.setValue(entity.getUniversidad()
					.getIduniversidad());
			txtIduniversidad_Universidad.setDisabled(false);
			txtIdfacultad.setValue(entity.getIdfacultad());
			txtIdfacultad.setDisabled(true);
			btnSave.setDisabled(false);

			if (btnDelete != null) {
				btnDelete.setDisabled(false);
			}
		}
	}

	public String action_edit(ActionEvent evt) {
		selectedFacultad = (FacultadDTO) (evt.getComponent().getAttributes()
				.get("selectedFacultad"));

		txtNombreFacultad.setValue(selectedFacultad.getNombreFacultad());
		txtNombreFacultad.setDisabled(false);
		txtIduniversidad_Universidad.setValue(selectedFacultad
				.getIduniversidad_Universidad());
		txtIduniversidad_Universidad.setDisabled(true);
		btnSave.setDisabled(false);
		setShowDialog(true);

		return "";
	}

	public String action_save() {
		try {
			if ((selectedFacultad == null) && (entity == null)) {
				action_create();
			} else {
				action_modify();
			}

			data = null;
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_create() {
		try {
			entity = new Facultad();
			entity.setIdfacultad(0);
			entity.setEstadoRegistro("activo");
			entity.setFechaCreacion(new Date());
			entity.setNombreFacultad(FacesUtils.checkString(txtNombreFacultad));

			entity.setUniversidad((FacesUtils
					.checkInteger(txtIduniversidad_Universidad) != null) ? businessDelegatorView
					.getUniversidad(FacesUtils
							.checkInteger(txtIduniversidad_Universidad)) : null);

			businessDelegatorView.saveFacultad(entity);

			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			action_clear();
		} catch (Exception e) {
			entity = null;
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modify() {
		try {
			if (entity == null) {
				Integer idfacultad = new Integer(
						selectedFacultad.getIdfacultad());
				entity = businessDelegatorView.getFacultad(idfacultad);
			}

			/*
			 * entity.setEstadoRegistro(FacesUtils.checkString(txtEstadoRegistro)
			 * );
			 * entity.setFechaCreacion(FacesUtils.checkDate(txtFechaCreacion));
			 * entity.setFechaUltimaModificacion(FacesUtils.checkDate(
			 * txtFechaUltimaModificacion));
			 */
			entity.setNombreFacultad(FacesUtils.checkString(txtNombreFacultad));
			/*
			 * entity.setUsuarioCreador(FacesUtils.checkString(txtUsuarioCreador)
			 * ); entity.setUsuarioUltimaModificacion(FacesUtils.checkString(
			 * txtUsuarioUltimaModificacion));
			 */
			entity.setFechaUltimaModificacion(new Date());
			entity.setUniversidad((FacesUtils
					.checkInteger(txtIduniversidad_Universidad) != null) ? businessDelegatorView
					.getUniversidad(FacesUtils
							.checkInteger(txtIduniversidad_Universidad)) : null);
			businessDelegatorView.updateFacultad(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			data = null;
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete_datatable(ActionEvent evt) {
		try {
			selectedFacultad = (FacultadDTO) (evt.getComponent()
					.getAttributes().get("selectedFacultad"));

			Integer idfacultad = new Integer(selectedFacultad.getIdfacultad());
			entity = businessDelegatorView.getFacultad(idfacultad);
			action_delete();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete_master() {
		try {
			Integer idfacultad = FacesUtils.checkInteger(txtIdfacultad);
			entity = businessDelegatorView.getFacultad(idfacultad);
			action_delete();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public void action_delete() throws Exception {
		try {
			businessDelegatorView.deleteFacultad(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
			data = null;
		} catch (Exception e) {
			throw e;
		}
	}

	public String action_closeDialog() {
		setShowDialog(false);
		action_clear();

		return "";
	}

	public String actionDeleteDataTableEditable(ActionEvent evt) {
		try {
			selectedFacultad = (FacultadDTO) (evt.getComponent()
					.getAttributes().get("selectedFacultad"));

			Integer idfacultad = new Integer(selectedFacultad.getIdfacultad());
			entity = businessDelegatorView.getFacultad(idfacultad);
			businessDelegatorView.deleteFacultad(entity);
			data.remove(selectedFacultad);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyWitDTO(String estadoRegistro,
			Date fechaCreacion, Date fechaUltimaModificacion,
			Integer idfacultad, String nombreFacultad, String usuarioCreador,
			String usuarioUltimaModificacion, Integer iduniversidad_Universidad)
			throws Exception {
		try {
			entity.setEstadoRegistro(FacesUtils.checkString(estadoRegistro));
			entity.setFechaCreacion(FacesUtils.checkDate(fechaCreacion));
			entity.setFechaUltimaModificacion(FacesUtils
					.checkDate(fechaUltimaModificacion));
			entity.setNombreFacultad(FacesUtils.checkString(nombreFacultad));
			entity.setUsuarioCreador(FacesUtils.checkString(usuarioCreador));
			entity.setUsuarioUltimaModificacion(FacesUtils
					.checkString(usuarioUltimaModificacion));
			businessDelegatorView.updateFacultad(entity);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("FacultadView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}

	public InputText getTxtNombreFacultad() {
		return txtNombreFacultad;
	}

	public void setTxtNombreFacultad(InputText txtNombreFacultad) {
		this.txtNombreFacultad = txtNombreFacultad;
	}

	public InputText getTxtIduniversidad_Universidad() {
		return txtIduniversidad_Universidad;
	}

	public void setTxtIduniversidad_Universidad(
			InputText txtIduniversidad_Universidad) {
		this.txtIduniversidad_Universidad = txtIduniversidad_Universidad;
	}

	public InputText getTxtIdfacultad() {
		return txtIdfacultad;
	}

	public void setTxtIdfacultad(InputText txtIdfacultad) {
		this.txtIdfacultad = txtIdfacultad;
	}

	public List<FacultadDTO> getData() {
		try {
			if (data == null) {
				data = businessDelegatorView.getDataFacultad();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return data;
	}

	public void setData(List<FacultadDTO> facultadDTO) {
		this.data = facultadDTO;
	}

	public FacultadDTO getSelectedFacultad() {
		return selectedFacultad;
	}

	public void setSelectedFacultad(FacultadDTO facultad) {
		this.selectedFacultad = facultad;
	}

	public CommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(CommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public CommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(CommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public CommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(CommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public CommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(CommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	public IBusinessDelegatorView getBusinessDelegatorView() {
		return businessDelegatorView;
	}

	public void setBusinessDelegatorView(
			IBusinessDelegatorView businessDelegatorView) {
		this.businessDelegatorView = businessDelegatorView;
	}

	public boolean isShowDialog() {
		return showDialog;
	}

	public void setShowDialog(boolean showDialog) {
		this.showDialog = showDialog;
	}
}
